package com.java.simple.study.juc.p5;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhoujunlin
 * @date 2022年06月27日 21:25
 * @desc
 */
public interface Account {

    /**
     * 获取余额
     *
     * @return
     */
    Integer getBalance();

    /**
     * 取款
     *
     * @param amount
     */
    void withdraw(Integer amount);

    /**
     * 测试方法：启动1000个线程 每个线程-10元
     * 如果初始余额为10000的话 最终正确结果应该是0
     *
     * @param account
     */
    static void demo(Account account) {
        List<Thread> ts = new ArrayList<>();
        long start = System.nanoTime();
        for (int i = 0; i < 1000; i++) {
            ts.add(new Thread(() -> {
                account.withdraw(10);
            }));
        }
        ts.forEach(Thread::start);
        ts.forEach(thread -> {
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        long end = System.nanoTime();
        System.out.println("剩余:" + account.getBalance() + " cost:" +
                (end - start) / 1000_000 + " ms");
    }

}
